home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / util / misc / tritonrexx376.lha / TritonRexx / ARexxControl / ARexxControl.rexx < prev    next >
OS/2 REXX Batch file  |  1995-09-16  |  50KB  |  1,780 lines

  1. /*
  2. ** $VER: ARexxControl.rexx 1.1 (16.9.95) ©1995 by Jürgen Kohrmeyer
  3. */
  4.  
  5. /*
  6. ** Argumente auswerten
  7. */
  8.  
  9. PARSE ARG prefsfile
  10.  
  11.  
  12. /*
  13. ** Beschreibung der Applikation
  14. */
  15.  
  16. appname     = 'ARexxControl'
  17. applongname = 'ARexxControl - ©1995 by Jürgen Kohrmeyer'
  18. appinfo     = 'Tool for ARrexx-Development'
  19. appversion  = '1.1'
  20. apprelease  = '1'
  21. appdate     = '16.9.95'
  22.  
  23.  
  24. /*
  25. ** Alles öffnen und Variablen initialisieren
  26. */
  27.  
  28. CALL initall
  29.  
  30.  
  31. /*
  32. ** Funktionen für Programmabbruch aktivieren, damit bei
  33. ** einem Fehler alles korrekt geschlossen wird
  34. */
  35.  
  36. startofprogram:
  37.  
  38. SIGNAL ON break_c
  39. SIGNAL ON failure
  40. SIGNAL ON halt
  41. SIGNAL ON ioerr
  42. SIGNAL ON syntax
  43.  
  44.  
  45. /*
  46. ** Eingaben auswerten
  47. */
  48.  
  49. quitprogram = FALSE
  50.  
  51. DO WHILE ~quitprogram
  52.    CALL TR_WAIT(app,'')
  53.  
  54.    DO WHILE TR_HANDLEMSG(app,'event')
  55.       IF event.trm_class = 'TRMS_ACTION' THEN DO
  56.          SELECT
  57.             /*
  58.             ** Main-Window
  59.             */
  60.  
  61.             WHEN event.trm_id = 2 THEN       /* Add... */
  62.                CALL addfiles
  63.  
  64.             WHEN event.trm_id = 3 THEN       /* Remove... */
  65.                CALL remfile
  66.  
  67.             WHEN event.trm_id = 4 THEN       /* Arguments... */
  68.                CALL setargs(TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1,FALSE)
  69.  
  70.             WHEN event.trm_id = 5 THEN       /* Sort */
  71.                CALL sortlist
  72.  
  73.             WHEN event.trm_id = 6 THEN       /* < */
  74.                CALL fileup
  75.  
  76.             WHEN event.trm_id = 7 THEN       /* > */
  77.                CALL filedown
  78.  
  79.             WHEN event.trm_id = 8 THEN       /* Icon */
  80.                CALL addicon
  81.  
  82.             WHEN event.trm_id = 9 THEN       /* Backup */
  83.                CALL backupfile
  84.  
  85.             WHEN event.trm_id = 10 THEN       /* Edit */
  86.                CALL editfile
  87.  
  88.             WHEN event.trm_id = 11 THEN      /* Start */
  89.                CALL startscript
  90.  
  91.             WHEN event.trm_id = 20 THEN      /* Tracing On/Off */
  92.                CALL tracingmode
  93.  
  94.             WHEN event.trm_id = 21 THEN DO   /* Global HALT */
  95.                globalhalt = TRUE
  96.                ADDRESS COMMAND 'SYS:RexxC/HI'
  97.             END
  98.  
  99.             WHEN event.trm_id = 22 THEN      /* ARexx-Shell */
  100.                IF ~SHOW('PORTS','AREXXCONTROL_SHELL') THEN
  101.                   ADDRESS COMMAND 'Run SYS:RexxC/RX <"'||constring(prefs.input)||'" >"'||constring(prefs.output)||'"' MAKEPATH(progdir,'ARexxControl.shell')
  102.  
  103.             WHEN event.trm_id = 23 THEN      /* FlushTRX */
  104.                ADDRESS COMMAND 'FlushTRX >NIL: ~(ARexxControl) IMAGES'
  105.  
  106.             WHEN event.trm_id = 30 THEN      /* Libs... */
  107.                CALL openliblist
  108.  
  109.             WHEN event.trm_id = 31 THEN      /* Clips... */
  110.                CALL opencliplist
  111.  
  112.             WHEN event.trm_id = 32 THEN      /* Other... */
  113.                CALL openotherlist
  114.  
  115.             WHEN event.trm_id = 40 THEN      /* Prefs... */
  116.                CALL editprefs
  117.  
  118.             WHEN event.trm_id = 41 THEN      /* Iconify */
  119.                CALL iconify
  120.  
  121.             WHEN event.trm_id = 42 THEN      /* Quit */
  122.                quitprogram = testchanges(localestring(MSG_REQ_REALLY_QUIT),localestring(MSG_REQ_SAVE_QUIT_GADS))
  123.  
  124.             WHEN event.trm_id = 100 THEN     /* New */
  125.                CALL newproject
  126.  
  127.             WHEN event.trm_id = 101 THEN     /* Open... */
  128.                IF testchanges(localestring(MSG_REQ_REALLY_OPEN),localestring(MSG_REQ_SAVE_OPEN_GADS)) THEN
  129.                   CALL loadprefs
  130.  
  131.             WHEN event.trm_id = 102 THEN     /* Save */
  132.                CALL saveprefs(prefsfile)
  133.  
  134.             WHEN event.trm_id = 103 THEN     /* Save as... */
  135.                CALL saveprefs('')
  136.  
  137.             WHEN event.trm_id = 104 THEN     /* Prefs... */
  138.                CALL editprefs
  139.  
  140.             WHEN event.trm_id = 105 THEN     /* About... */
  141.                CALL about
  142.  
  143.             WHEN event.trm_id = 106 THEN     /* Iconify */
  144.                CALL iconify
  145.  
  146.             WHEN event.trm_id = 107 THEN     /* Quit... */
  147.                quitprogram = testchanges(localestring(MSG_REQ_REALLY_QUIT),localestring(MSG_REQ_SAVE_QUIT_GADS))
  148.  
  149.             /*
  150.             ** ARexx-Libraries
  151.             */
  152.  
  153.             WHEN event.trm_id = 402 THEN     /* AddLib... */
  154.                CALL addlibrary
  155.  
  156.             WHEN event.trm_id = 403 THEN     /* RemLib */
  157.                CALL remlibrary
  158.  
  159.             WHEN event.trm_id = 404 THEN     /* Update */
  160.                CALL updateliblist
  161.  
  162.             /*
  163.             ** ARexx-Clips
  164.             */
  165.  
  166.             WHEN event.trm_id = 502 THEN     /* SetClip... */
  167.                CALL opensetclip
  168.  
  169.             WHEN event.trm_id = 503 THEN     /* Delete */
  170.                CALL deleteclip
  171.  
  172.             WHEN event.trm_id = 504 THEN     /* Update */
  173.                CALL updatecliplist
  174.  
  175.             /*
  176.             ** Other list
  177.             */
  178.  
  179.             WHEN event.trm_id = 603 THEN     /* Update */
  180.                CALL updateotherlist
  181.  
  182.             /*
  183.             ** SetClip
  184.             */
  185.  
  186.             WHEN event.trm_id = 703 THEN DO  /* Use */
  187.                CALL set_clip
  188.                CALL TR_CLOSEPROJECT(setclipwindow)
  189.                setclipwindow = '00000000'x
  190.             END
  191.  
  192.             WHEN event.trm_id = 704 THEN DO  /* Cancel */
  193.                CALL TR_CLOSEPROJECT(setclipwindow)
  194.                setclipwindow = '00000000'x
  195.             END
  196.  
  197.             OTHERWISE
  198.                NOP
  199.          END
  200.       END
  201.  
  202.       IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  203.          IF event.trm_id = 1 THEN DO         /* Scriptlist */
  204.             IF BITAND(D2X(event.trm_qualifier),'0200'x) = '0200'x THEN
  205.                CALL setargs(event.trm_data+1,FALSE)
  206.          END
  207.  
  208.          IF event.trm_id = 601 THEN DO       /* Other lists - CycleGadget */
  209.             otherlistmode = event.trm_data
  210.             CALL updateotherlist
  211.          END
  212.       END
  213.  
  214.       IF event.trm_class = 'TRMS_ICONDROPPED' THEN DO
  215.          DO i = 1 TO event.trm_data.0
  216.             IF LEFT(STATEF(event.trm_data.i),4) = 'FILE' THEN DO
  217.                number = scriptlist.0+1
  218.  
  219.                scriptlist.number = event.trm_data.i
  220.                arglist.number    = ''
  221.  
  222.                scriptlist.0 = scriptlist.0+1
  223.                arglist.0    = arglist.0+1
  224.             END
  225.          END
  226.  
  227.  
  228.          CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  229.          CALL TR_SETATTRIBUTE(mainwindow,1,'TRAT_Value',scriptlist.0-1)
  230.  
  231.          changed = TRUE
  232.  
  233.          CALL disablegads()
  234.       END
  235.  
  236.       IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN DO
  237.          IF event.trm_project = libswindow THEN DO
  238.             CALL TR_CLOSEPROJECT(libswindow)
  239.             libswindow = '00000000'x
  240.          END
  241.  
  242.          IF event.trm_project = clipswindow THEN DO
  243.             CALL TR_CLOSEPROJECT(clipswindow)
  244.             clipswindow = '00000000'x
  245.          END
  246.  
  247.          IF event.trm_project = otherwindow THEN DO
  248.             CALL TR_CLOSEPROJECT(otherwindow)
  249.             otherwindow = '00000000'x
  250.          END
  251.  
  252.          IF event.trm_project = setclipwindow THEN DO
  253.             CALL TR_CLOSEPROJECT(setclipwindow)
  254.             setclipwindow = '00000000'x
  255.          END
  256.  
  257.          IF event.trm_project = dummywindow THEN
  258.             CALL uniconify
  259.  
  260.          IF event.trm_project = mainwindow THEN
  261.             quitprogram = testchanges(localestring(MSG_REQ_REALLY_QUIT),localestring(MSG_REQ_SAVE_QUIT_GADS))
  262.       END
  263.    END
  264. END
  265.  
  266. CALL TR_CLOSEPROJECT(mainwindow)
  267.  
  268.  
  269. /*
  270. ** Programm beenden
  271. */
  272.  
  273. quit('',0)
  274.  
  275.  
  276.  
  277. /*******************************************************************************
  278. ** Dateien hinzufügen
  279. *******************************************************************************/
  280.  
  281. addfiles:
  282.    taglist = LoadFileM(localestring(MSG_FILEREQ_ADD_FILES),localestring(MSG_REQ_GAD_OKAY),use.arexxdir,'') 'ASLFR_PubScreenName' prefs.screen
  283.  
  284.    IF ASL_REQUESTFILE(mainwindow,'destvar',taglist) THEN DO
  285.       DO i = 1 TO destvar.0
  286.          number = scriptlist.0+i
  287.          scriptlist.number = destvar.i
  288.          arglist.number    = ''
  289.       END
  290.  
  291.       scriptlist.0 = scriptlist.0+destvar.0
  292.       arglist.0    = scriptlist.0
  293.  
  294.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  295.       CALL TR_SETATTRIBUTE(mainwindow,1,'TRAT_Value',scriptlist.0-1)
  296.  
  297.       use.arexxdir = PATHPART(destvar.1)
  298.  
  299.       changed = TRUE
  300.  
  301.       CALL disablegads()
  302.    END
  303.  
  304.    RETURN
  305.  
  306.  
  307.  
  308. /*******************************************************************************
  309. ** Datei entfernen
  310. *******************************************************************************/
  311.  
  312. remfile:
  313.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  314.  
  315.    IF easyrequest(scriptlist.number||NL||localestring(MSG_REQ_REMOVE_SCRIPT),localestring(MSG_REQ_REMOVE_SCRIPT_GADS),mainwindow) THEN DO
  316.       scriptlist.0 = scriptlist.0-1
  317.       arglist.0    = scriptlist.0
  318.  
  319.       DO i = number TO scriptlist.0
  320.          next = i+1
  321.  
  322.          scriptlist.i = scriptlist.next
  323.          arglist.i    = arglist.next
  324.       END
  325.  
  326.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  327.  
  328.       changed = TRUE
  329.  
  330.       CALL disablegads()
  331.    END
  332.  
  333.    RETURN
  334.  
  335.  
  336.  
  337. /*******************************************************************************
  338. ** Argumente eingeben
  339. *******************************************************************************/
  340.  
  341. setargs:
  342.    PARSE ARG number,temp
  343.  
  344.    CALL TR_LOCKPROJECT(mainwindow)
  345.  
  346.    IF libswindow ~= '00000000'x THEN
  347.       CALL TR_LOCKPROJECT(libswindow)
  348.  
  349.    IF clipswindow ~= '00000000'x THEN
  350.       CALL TR_LOCKPROJECT(clipswindow)
  351.  
  352.    IF otherwindow ~= '00000000'x THEN
  353.       CALL TR_LOCKPROJECT(otherwindow)
  354.  
  355.    IF setclipwindow ~= '00000000'x THEN
  356.       CALL TR_LOCKPROJECT(setclipwindow)
  357.  
  358.    setargswindow = TR_OPENPROJECT(app,WindowID(8),
  359.                      WindowFlags('TRWF_ACTIVATESTRGAD'),
  360.                      WindowPosition('TRWP_MOUSEPOINTER'),
  361.                      WindowTitle(localestring(MSG_SETARGS_TITLE)),
  362.                      PubScreenName(prefs.screen),
  363.                      'HorizGroupA',
  364.                         'Space',
  365.                         'VertGroupA',
  366.                            'Space',
  367.                            NamedFrameBox(localestring(MSG_SETARGS_FRAMEBOX) FILEPART(scriptlist.number)) 'TRAT_ID 801',
  368.                            'HorizGroupA',
  369.                               'Space',
  370.                               'VertGroupA',
  371.                                  'Space',
  372.                                  StringGadget('',801) 'TRAT_Value 256 TRAT_Flags TRST_NORETURNBROADCAST',
  373.                                  'Space',
  374.                               'EndGroup',
  375.                               'Space',
  376.                            'EndGroup',
  377.                            'Space',
  378.                            'HorizGroupSAC',
  379.                               ButtonR(localestring(MSG_REQ_GAD_USE),802),
  380.                               'Space',
  381.                               ButtonE(localestring(MSG_REQ_GAD_CANCEL),803),
  382.                            'EndGroup',
  383.                            'Space',
  384.                         'EndGroup',
  385.                         'Space',
  386.                      'EndGroup EndProject')
  387.  
  388.    IF setargswindow ~= '00000000'x THEN DO
  389.       IF ~temp THEN
  390.          CALL TR_SETATTRIBUTE(setargswindow,801,'TROB_String',arglist.number)
  391.       ELSE
  392.          temparg = ''
  393.  
  394.       quitsetargs = FALSE
  395.  
  396.       DO WHILE ~quitsetargs
  397.          CALL TR_WAIT(app,'')
  398.  
  399.          DO WHILE TR_HANDLEMSG(app,'event')
  400.             SELECT
  401.                WHEN event.trm_class = 'TRMS_ACTION' THEN DO
  402.                   SELECT
  403.                      WHEN event.trm_id = 802 THEN DO        /* Use */
  404.                         IF ~temp THEN DO
  405.                            arglist.number = TR_GETATTRIBUTE(setargswindow,801,'TROB_String')
  406.                            changed = TRUE
  407.                         END
  408.                         ELSE
  409.                            temparg = TR_GETATTRIBUTE(setargswindow,801,'TROB_String')
  410.  
  411.                         quitsetargs = TRUE
  412.                      END
  413.  
  414.                      WHEN event.trm_id = 803 THEN           /* Cancel */
  415.                         quitsetargs = TRUE
  416.  
  417.                      OTHERWISE
  418.                         NOP
  419.                   END
  420.                END
  421.  
  422.                WHEN event.trm_class = 'TRMS_CLOSEWINDOW' THEN
  423.                   quitsetargs = TRUE
  424.  
  425.                OTHERWISE
  426.                   NOP
  427.             END
  428.          END
  429.       END
  430.  
  431.       CALL TR_CLOSEPROJECT(setargswindow)
  432.    END
  433.    ELSE
  434.       CALL easyrequest(localestring(ERROR_CANNOT_OPEN_WINDOW),localestring(MSG_REQ_GAD_OKAY),mainwindow)
  435.  
  436.    IF libswindow ~= '00000000'x THEN
  437.       CALL TR_UNLOCKPROJECT(libswindow)
  438.  
  439.    IF clipswindow ~= '00000000'x THEN
  440.       CALL TR_UNLOCKPROJECT(clipswindow)
  441.  
  442.    IF otherwindow ~= '00000000'x THEN
  443.       CALL TR_UNLOCKPROJECT(otherwindow)
  444.  
  445.    IF setclipwindow ~= '00000000'x THEN
  446.       CALL TR_UNLOCKPROJECT(setclipwindow)
  447.  
  448.    CALL TR_UNLOCKPROJECT(mainwindow)
  449.  
  450.    RETURN
  451.  
  452.  
  453.  
  454. /*******************************************************************************
  455. ** Liste sortieren
  456. *******************************************************************************/
  457.  
  458. sortlist:
  459.    DO i = 1 TO scriptlist.0
  460.       sortlist.i = LEFT(scriptlist.i,256)||arglist.i
  461.    END
  462.  
  463.    sortlist.0 = scriptlist.0
  464.  
  465.    CALL QSORT('sortlist')
  466.  
  467.    DO i = 1 TO sortlist.0
  468.       scriptlist.i = TRIM(LEFT(sortlist.i,256))
  469.       arglist.i = SUBSTR(sortlist.i,257)
  470.    END
  471.  
  472.    CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  473.  
  474.    changed = TRUE
  475.  
  476.    RETURN
  477.  
  478.  
  479.  
  480. /*******************************************************************************
  481. ** Nach oben
  482. *******************************************************************************/
  483.  
  484. fileup:
  485.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  486.  
  487.    IF number > 1 THEN DO
  488.       prev = number-1
  489.  
  490.       swap = scriptlist.prev
  491.       scriptlist.prev = scriptlist.number
  492.       scriptlist.number = swap
  493.  
  494.       swap = arglist.prev
  495.       arglist.prev = arglist.number
  496.       arglist.number = swap
  497.  
  498.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  499.       CALL TR_SETATTRIBUTE(mainwindow,1,'TRAT_Value',prev-1)
  500.  
  501.       changed = TRUE
  502.    END
  503.  
  504.    RETURN
  505.  
  506.  
  507.  
  508. /*******************************************************************************
  509. ** Nach unten
  510. *******************************************************************************/
  511.  
  512. filedown:
  513.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  514.  
  515.    IF number < scriptlist.0 THEN DO
  516.       next = number+1
  517.  
  518.       swap = scriptlist.next
  519.       scriptlist.next = scriptlist.number
  520.       scriptlist.number = swap
  521.  
  522.       swap = arglist.next
  523.       arglist.next = arglist.number
  524.       arglist.number = swap
  525.  
  526.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  527.       CALL TR_SETATTRIBUTE(mainwindow,1,'TRAT_Value',next-1)
  528.  
  529.       changed = TRUE
  530.    END
  531.  
  532.    RETURN
  533.  
  534.  
  535.  
  536. /*******************************************************************************
  537. ** Icon für eine Datei erstellen
  538. *******************************************************************************/
  539.  
  540. addicon:
  541.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  542.  
  543.    IF UPPER(SUFFIXPART(prefs.icon)) = 'INFO' THEN
  544.       deficon = LEFT(prefs.icon,LENGTH(prefs.icon)-5)
  545.    ELSE
  546.       deficon = prefs.icon
  547.  
  548.    CALL CREATEICON(scriptlist.number,deficon,,,)
  549.    RETURN
  550.  
  551.  
  552.  
  553. /*******************************************************************************
  554. ** Kopie einer Datei anlegen
  555. *******************************************************************************/
  556.  
  557. backupfile:
  558.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  559.  
  560.    IF prefs.backupdir = '' THEN
  561.       backupname = scriptlist.number
  562.    ELSE
  563.       backupname = MAKEPATH(prefs.backupdir,FILEPART(scriptlist.number))
  564.  
  565.    backupname = MAKESUFFIX(backupname,'1','APPEND')
  566.  
  567.    i = 2
  568.  
  569.    DO WHILE EXISTS(backupname)
  570.       backupname = MAKESUFFIX(backupname,i,'REPLACE')
  571.       i = i+1
  572.    END
  573.  
  574.    OPTIONS FAILAT 21
  575.    ADDRESS COMMAND 'Copy "'||scriptlist.number||'" "'||backupname||'"'
  576.    OPTIONS FAILAT 10
  577.  
  578.    RETURN
  579.  
  580.  
  581.  
  582. /*******************************************************************************
  583. ** Datei in den Editor laden
  584. *******************************************************************************/
  585.  
  586. editfile:
  587.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  588.  
  589.    /*
  590.    ** Dateiname in den Befehlstext eintragen
  591.    */
  592.  
  593.    position = POS('%F',UPPER(prefs.editor))
  594.  
  595.    IF position ~= 0 THEN
  596.       commandline = LEFT(prefs.editor,position-1)||'"'||scriptlist.number||'"'||SUBSTR(prefs.editor,position+2)
  597.    ELSE
  598.       commandline = prefs.editor '"'||scriptlist.number||'"'
  599.  
  600.    /*
  601.    ** PublicScreen in den Befehlstext eintragen
  602.    */
  603.  
  604.    position = POS('%S',UPPER(commandline))
  605.  
  606.    IF position ~= 0 THEN
  607.       commandline = LEFT(commandline,position-1)||prefs.screen||SUBSTR(commandline,position+2)
  608.  
  609.    OPTIONS FAILAT 21
  610.    ADDRESS COMMAND commandline
  611.    OPTIONS FAILAT 10
  612.  
  613.    RETURN
  614.  
  615.  
  616.  
  617. /*******************************************************************************
  618. ** ARexx-Script starten
  619. *******************************************************************************/
  620.  
  621. startscript:
  622.    number = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')+1
  623.  
  624.    IF arglist.number = '?' THEN
  625.       CALL setargs(number,TRUE)
  626.    ELSE
  627.       temparg = arglist.number
  628.  
  629.    ADDRESS COMMAND 'run SYS:RexxC/RX <>"'||constring(prefs.console)||'"' scriptlist.number temparg
  630.    RETURN
  631.  
  632.  
  633.  
  634. /*******************************************************************************
  635. ** Tracing-Console öffnen oder schließen
  636. *******************************************************************************/
  637.  
  638. tracingmode:
  639.    IF tracing THEN DO
  640.       ADDRESS COMMAND 'SYS:RexxC/TCC'
  641.       IF rc = 0 THEN
  642.          tracing = FALSE
  643.    END
  644.    ELSE DO
  645.       ADDRESS COMMAND 'SYS:RexxC/TCO'
  646.       IF rc = 0 THEN
  647.          tracing = TRUE
  648.    END
  649.  
  650.    RETURN
  651.  
  652.  
  653.  
  654. /*******************************************************************************
  655. ** Fenster für die Liste der ARexx-Libraries öffnen
  656. *******************************************************************************/
  657.  
  658. openliblist:
  659.    IF libswindow ~= '00000000'x THEN DO
  660.       CALL PROJECTTOFRONT(libswindow)
  661.       CALL ACTIVATEPROJECT(libswindow)
  662.       RETURN
  663.    END
  664.  
  665.    liblist.0  = 0
  666.    libswindow = TR_OPENPROJECT(app,libswindowtags)
  667.  
  668.    IF libswindow ~= '00000000'x THEN
  669.       CALL updateliblist
  670.  
  671.    RETURN
  672.  
  673.  
  674.  
  675. /*******************************************************************************
  676. ** Liste der ARexx-Libraries im Fenster anzeigen
  677. *******************************************************************************/
  678.  
  679. updateliblist:
  680.    CALL TR_LOCKPROJECT(libswindow)
  681.  
  682.    liblist.0  = string2stemvar(SHOW('LIBRARIES',,'|'),'liblist')
  683.  
  684.    CALL TR_SETATTRIBUTE(libswindow,401,'TROB_Listview','liblist')
  685.  
  686.    IF liblist.0 = 0 THEN DO
  687.       CALL TR_SETATTRIBUTE(libswindow,403,'TRAT_Disabled',TRUE)
  688.       CALL TR_SETATTRIBUTE(libswindow,404,'TRAT_Disabled',TRUE)
  689.    END
  690.    ELSE DO
  691.       CALL TR_SETATTRIBUTE(libswindow,403,'TRAT_Disabled',FALSE)
  692.       CALL TR_SETATTRIBUTE(libswindow,404,'TRAT_Disabled',FALSE)
  693.    END
  694.  
  695.    CALL TR_UNLOCKPROJECT(libswindow)
  696.    RETURN
  697.  
  698.  
  699.  
  700. /*******************************************************************************
  701. ** Library zur ARexx-Liste hinzufügen
  702. *******************************************************************************/
  703.  
  704. addlibrary:
  705.    addlibtaglist = LoadFileM(localestring(MSG_FILEREQ_ADD_LIB),localestring(MSG_REQ_GAD_OKAY),use.libdir,'') 'ASLFR_PubScreenName' prefs.screen
  706.  
  707.    IF ASL_REQUESTFILE(libswindow,'libvar',addlibtaglist) THEN DO
  708.       DO x = 1 TO libvar.0
  709.          CALL ADDLIB(FILEPART(libvar.x),0,-30,0)
  710.       END
  711.  
  712.       use.libdir = PATHPART(libvar.1)
  713.  
  714.       CALL updateliblist
  715.    END
  716.    RETURN
  717.  
  718.  
  719.  
  720. /*******************************************************************************
  721. ** Library aus der ARexx-Liste entfernen
  722. *******************************************************************************/
  723.  
  724. remlibrary:
  725.    libnumber = TR_GETATTRIBUTE(libswindow,401,'TRAT_Value')+1
  726.  
  727.    IF easyrequest(liblist.libnumber||NL||localestring(MSG_REQ_REMOVE_LIB),localestring(MSG_REQ_REMOVE_LIB_GADS),libswindow) THEN DO
  728.       CALL REMLIB(liblist.libnumber)
  729.       CALL updateliblist
  730.    END
  731.  
  732.    RETURN
  733.  
  734.  
  735.  
  736. /*******************************************************************************
  737. ** Fenster für die Liste der ARexx-Clips öffnen
  738. *******************************************************************************/
  739.  
  740. opencliplist:
  741.    IF clipswindow ~= '00000000'x THEN DO
  742.       CALL PROJECTTOFRONT(clipswindow)
  743.       CALL ACTIVATEPROJECT(clipswindow)
  744.       RETURN
  745.    END
  746.  
  747.    cliplist.0 = 0
  748.    clipswindow = TR_OPENPROJECT(app,clipswindowtags)
  749.  
  750.    IF clipswindow ~= '00000000'x THEN
  751.       CALL updatecliplist
  752.  
  753.    RETURN
  754.  
  755.  
  756.  
  757. /*******************************************************************************
  758. ** Liste der ARexx-Clips im Fenster anzeigen
  759. *******************************************************************************/
  760.  
  761. updatecliplist:
  762.    CALL TR_LOCKPROJECT(clipswindow)
  763.  
  764.    cliplist.0  = string2stemvar(SHOW('CLIPS',,'|'),'cliplist')
  765.  
  766.    DO y = 1 TO cliplist.0
  767.       cliplist.y = LEFT(cliplist.y,30) LEFT(GETCLIP(cliplist.y),30)
  768.    END
  769.  
  770.    CALL QSORT('cliplist')
  771.  
  772.    CALL TR_SETATTRIBUTE(clipswindow,501,'TROB_Listview','cliplist')
  773.  
  774.    IF cliplist.0 = 0 THEN
  775.       CALL TR_SETATTRIBUTE(clipswindow,503,'TRAT_Disabled',TRUE)
  776.    ELSE
  777.       CALL TR_SETATTRIBUTE(clipswindow,503,'TRAT_Disabled',FALSE)
  778.  
  779.    CALL TR_UNLOCKPROJECT(clipswindow)
  780.    RETURN
  781.  
  782.  
  783.  
  784. /*******************************************************************************
  785. ** Fenster zum Ändern eines ARexx-Clips öffnen
  786. *******************************************************************************/
  787.  
  788. opensetclip:
  789.    IF setclipwindow ~= '00000000'x THEN DO
  790.       CALL PROJECTTOFRONT(setclipwindow)
  791.       CALL ACTIVATEPROJECT(setclipwindow)
  792.       CALL TR_SENDMESSAGE(setclipwindow,701,'TROM_ACTIVATE',0)
  793.       RETURN
  794.    END
  795.  
  796.    setclipwindow = TR_OPENPROJECT(app,setclipwindowtags)
  797.    RETURN
  798.  
  799.  
  800.  
  801. /*******************************************************************************
  802. ** Wert eines ARexx-Clips ändern
  803. *******************************************************************************/
  804.  
  805. set_clip:
  806.    clipname  = TR_GETATTRIBUTE(setclipwindow,701,'TROB_String')
  807.    clipvalue = TR_GETATTRIBUTE(setclipwindow,702,'TROB_String')
  808.  
  809.    IF clipname ~= '' THEN
  810.       CALL SETCLIP(clipname,clipvalue)
  811.  
  812.    IF clipswindow ~= '00000000'x THEN
  813.       CALL updatecliplist
  814.  
  815.    RETURN
  816.  
  817.  
  818.  
  819. /*******************************************************************************
  820. ** ARexx-Clip löschen
  821. *******************************************************************************/
  822.  
  823. deleteclip:
  824.    IF clipswindow ~= '00000000'x THEN DO
  825.       clipnumber = TR_GETATTRIBUTE(clipswindow,501,'TRAT_Value')+1
  826.  
  827.       clipname = TRIM(LEFT(cliplist.clipnumber,30))
  828.  
  829.       CALL SETCLIP(clipname)
  830.  
  831.       CALL updatecliplist
  832.    END
  833.  
  834.    RETURN
  835.  
  836.  
  837.  
  838. /*******************************************************************************
  839. ** Fenster für andere Listen öffnen
  840. *******************************************************************************/
  841.  
  842. openotherlist:
  843.    IF otherwindow ~= '00000000'x THEN DO
  844.       CALL PROJECTTOFRONT(otherwindow)
  845.       CALL ACTIVATEPROJECT(otherwindow)
  846.       RETURN
  847.    END
  848.  
  849.    otherlist.0 = 0
  850.    otherwindow = TR_OPENPROJECT(app,otherwindowtags)
  851.  
  852.    CALL updateotherlist
  853.    RETURN
  854.  
  855.  
  856.  
  857. /*******************************************************************************
  858. ** Neue Liste im Fenster anzeigen
  859. *******************************************************************************/
  860.  
  861. updateotherlist:
  862.    CALL TR_LOCKPROJECT(otherwindow)
  863.    CALL TR_SETATTRIBUTE(otherwindow,601,'TRAT_Value',otherlistmode)
  864.  
  865.    SELECT
  866.       WHEN otherlistmode = 0 THEN
  867.          otherlist.0 = string2stemvar(SHOW('FILES',,'|'),'otherlist')
  868.  
  869.       WHEN otherlistmode = 1 THEN DO
  870.          otherlist.0 = string2stemvar(SHOWLIST('ASSIGN',,'|'),'otherlist')
  871.  
  872.          DO z = 1 TO otherlist.0
  873.             otherlist.z = otherlist.z||':'
  874.          END
  875.       END
  876.  
  877.       WHEN otherlistmode = 2 THEN
  878.          otherlist.0 = string2stemvar(SHOWLIST('DEVICES',,'|'),'otherlist')
  879.  
  880.       WHEN otherlistmode = 3 THEN DO
  881.          otherlist.0 = string2stemvar(SHOWLIST('HANDLERS',,'|'),'otherlist')
  882.  
  883.          DO z = 1 TO otherlist.0
  884.             otherlist.z = otherlist.z||':'
  885.          END
  886.       END
  887.  
  888.       WHEN otherlistmode = 4 THEN
  889.          otherlist.0 = string2stemvar(SHOWLIST('INTRLIST',,'|'),'otherlist')
  890.  
  891.       WHEN otherlistmode = 5 THEN
  892.          otherlist.0 = string2stemvar(SHOWLIST('LIBRARIES',,'|'),'otherlist')
  893.  
  894.       WHEN otherlistmode = 6 THEN
  895.          otherlist.0 = string2stemvar(SHOWLIST('PORTS',,'|'),'otherlist')
  896.  
  897.       WHEN otherlistmode = 7 THEN
  898.          CALL PUBSCREENLIST('otherlist')
  899.  
  900.       WHEN otherlistmode = 8 THEN
  901.          otherlist.0 = string2stemvar(SHOWLIST('RESOURCES',,'|'),'otherlist')
  902.  
  903.       WHEN otherlistmode = 9 THEN
  904.          otherlist.0 = string2stemvar(SHOWLIST('SEMAPHORES',,'|'),'otherlist')
  905.  
  906.       WHEN otherlistmode = 10 THEN DO
  907.          readylist.0 = string2stemvar(SHOWLIST('READY',,'|'),'readylist')
  908.          waitlist.0  = string2stemvar(SHOWLIST('WAITING',,'|'),'waitlist')
  909.  
  910.          DO z = 1 TO readylist.0
  911.             otherlist.z = LEFT(readylist.z,30) ' READY'
  912.          END
  913.  
  914.          DO z = 1 TO waitlist.0
  915.             number = readylist.0+z
  916.             otherlist.number = LEFT(waitlist.z,30) '  WAIT'
  917.          END
  918.  
  919.          otherlist.0 = readylist.0+waitlist.0
  920.  
  921.          DROP readylist.
  922.          DROP waitlist.
  923.       END
  924.  
  925.       WHEN otherlistmode = 11 THEN DO
  926.          otherlist.0 = string2stemvar(SHOWLIST('VOLUMES',,'|'),'otherlist')
  927.  
  928.          DO z = 1 TO otherlist.0
  929.             otherlist.z = otherlist.z||':'
  930.          END
  931.       END
  932.    END
  933.  
  934.    CALL QSORT('otherlist')
  935.  
  936.    CALL TR_SETATTRIBUTE(otherwindow,602,'TROB_Listview','otherlist')
  937.    CALL TR_UNLOCKPROJECT(otherwindow)
  938.    RETURN
  939.  
  940.  
  941.  
  942. /*******************************************************************************
  943. ** Komponenten eines mit SHOW() ermittelten String in Stem-Variable speichern
  944. *******************************************************************************/
  945.  
  946. string2stemvar:
  947.    PARSE ARG string,stemvar
  948.  
  949.    pos1 = 1
  950.    pos2 = 1
  951.    count = 0
  952.  
  953.    DO WHILE pos2 <= LENGTH(string)
  954.       pos2 = POS('|',string,pos1)
  955.  
  956.       IF pos2 = 0 THEN
  957.          pos2 = LENGTH(string)+1
  958.  
  959.       count = count+1
  960.  
  961.       INTERPRET(stemvar||'.'||count '= "'||SUBSTR(string,pos1,pos2-pos1)||'"')
  962.  
  963.       pos1 = pos2+1
  964.    END
  965.  
  966.    RETURN(count)
  967.  
  968.  
  969.  
  970. /*******************************************************************************
  971. ** Einstellungen ändern
  972. *******************************************************************************/
  973.  
  974. editprefs:
  975.    CALL TR_LOCKPROJECT(mainwindow)
  976.  
  977.    IF libswindow ~= '00000000'x THEN
  978.       CALL TR_LOCKPROJECT(libswindow)
  979.  
  980.    IF clipswindow ~= '00000000'x THEN
  981.       CALL TR_LOCKPROJECT(clipswindow)
  982.  
  983.    IF otherwindow ~= '00000000'x THEN
  984.       CALL TR_LOCKPROJECT(otherwindow)
  985.  
  986.    IF setclipwindow ~= '00000000'x THEN
  987.       CALL TR_LOCKPROJECT(setclipwindow)
  988.  
  989.    oldinput  = prefs.input
  990.    oldoutput = prefs.output
  991.    oldscreen = prefs.screen
  992.  
  993.    prefswindow = TR_OPENPROJECT(app,prefswindowtags)
  994.  
  995.    IF prefswindow ~= '00000000'x THEN DO
  996.       CALL TR_SETATTRIBUTE(prefswindow,201,'TROB_String',prefs.input)
  997.       CALL TR_SETATTRIBUTE(prefswindow,202,'TROB_String',prefs.output)
  998.       CALL TR_SETATTRIBUTE(prefswindow,203,'TROB_String',prefs.console)
  999.       CALL TR_SETATTRIBUTE(prefswindow,210,'TROB_String',prefs.icon)
  1000.       CALL TR_SETATTRIBUTE(prefswindow,212,'TROB_String',prefs.backupdir)
  1001.       CALL TR_SETATTRIBUTE(prefswindow,214,'TROB_String',prefs.arexxdir)
  1002.       CALL TR_SETATTRIBUTE(prefswindow,216,'TROB_String',prefs.libdir)
  1003.       CALL TR_SETATTRIBUTE(prefswindow,218,'TROB_String',prefs.editor)
  1004.       CALL TR_SETATTRIBUTE(prefswindow,220,'TROB_String',prefs.screen)
  1005.  
  1006.       quiteditprefs = FALSE
  1007.  
  1008.       DO WHILE ~quiteditprefs
  1009.          CALL TR_WAIT(app,'')
  1010.  
  1011.          DO WHILE TR_HANDLEMSG(app,'event')
  1012.             SELECT
  1013.                WHEN event.trm_class = 'TRMS_ACTION' THEN DO
  1014.                   SELECT
  1015.                      WHEN event.trm_id = 211 THEN DO        /* GetFile Icon */
  1016.                         def = TR_GETATTRIBUTE(prefswindow,210,'TROB_String')
  1017.  
  1018.                         defdir  = PATHPART(def)
  1019.                         deffile = FILEPART(def)
  1020.  
  1021.                         IF ASL_REQUESTFILE(prefswindow,'destvar',,
  1022.                            LoadFileIP(localestring(MSG_FILEREQ_SELECT_ICON),,
  1023.                            localestring(MSG_REQ_GAD_USE),defdir,deffile,'#?.info'),
  1024.                            'ASLFR_PubScreenName' prefs.screen) THEN
  1025.                            CALL TR_SETATTRIBUTE(prefswindow,210,'TROB_String',destvar.1)
  1026.                      END
  1027.  
  1028.                      WHEN event.trm_id = 213 | event.trm_id = 215 | event.trm_id = 217 THEN DO  /* GetDrawer */
  1029.                         def = TR_GETATTRIBUTE(prefswindow,event.trm_id-1,'TROB_String')
  1030.  
  1031.                         IF ASL_REQUESTFILE(prefswindow,'destvar',,
  1032.                            GetDrawer(localestring(MSG_FILEREQ_SELECT_DRAWER),,
  1033.                            localestring(MSG_REQ_GAD_USE),def),
  1034.                            'ASLFR_PubScreenName' prefs.screen) THEN
  1035.                            CALL TR_SETATTRIBUTE(prefswindow,event.trm_id-1,'TROB_String',destvar.1)
  1036.                      END
  1037.  
  1038.                      WHEN event.trm_id = 219 THEN           /* GetFile Editor */
  1039.                         CALL getfilename(prefswindow,218,'',localestring(MSG_FILEREQ_SELECT_EDITOR))
  1040.  
  1041.                      WHEN event.trm_id = 221 THEN DO        /* GetEntry Pubscreen */
  1042.                         IF PUBSCREENLIST('screenlist') THEN DO
  1043.                            screenrequest = TR_OpenProject(app,screenlisttags)
  1044.  
  1045.                            IF screenrequest ~= '00000000'x THEN
  1046.                               CALL TR_LOCKPROJECT(prefswindow)
  1047.                         END
  1048.                      END
  1049.  
  1050.                      WHEN event.trm_id = 298 THEN DO        /* Okay */
  1051.                         prefs.input     = TR_GETATTRIBUTE(prefswindow,201,'TROB_String')
  1052.                         prefs.output    = TR_GETATTRIBUTE(prefswindow,202,'TROB_String')
  1053.                         prefs.console   = TR_GETATTRIBUTE(prefswindow,203,'TROB_String')
  1054.                         prefs.icon      = TR_GETATTRIBUTE(prefswindow,210,'TROB_String')
  1055.                         prefs.backupdir = TR_GETATTRIBUTE(prefswindow,212,'TROB_String')
  1056.                         prefs.arexxdir  = TR_GETATTRIBUTE(prefswindow,214,'TROB_String')
  1057.                         prefs.libdir    = TR_GETATTRIBUTE(prefswindow,216,'TROB_String')
  1058.                         prefs.editor    = TR_GETATTRIBUTE(prefswindow,218,'TROB_String')
  1059.                         prefs.screen    = TR_GETATTRIBUTE(prefswindow,220,'TROB_String')
  1060.  
  1061.                         use.arexxdir = prefs.arexxdir
  1062.                         use.libdir   = prefs.libdir
  1063.  
  1064.                         changed       = TRUE
  1065.                         quiteditprefs = TRUE
  1066.                      END
  1067.  
  1068.                      WHEN event.trm_id = 299 THEN           /* Cancel */
  1069.                         quiteditprefs = TRUE
  1070.  
  1071.                      WHEN event.trm_id = 399 THEN DO        /* Screenlist - Cancel */
  1072.                         CALL TR_CLOSEPROJECT(screenrequest)
  1073.                         CALL TR_UNLOCKPROJECT(prefswindow)
  1074.                      END
  1075.  
  1076.                      OTHERWISE
  1077.                         NOP
  1078.                   END
  1079.                END
  1080.  
  1081.                WHEN event.trm_class = 'TRMS_NEWVALUE' THEN DO
  1082.                   IF event.trm_id = 301 THEN DO             /* Screenlist */
  1083.                      number = event.trm_data+1
  1084.  
  1085.                      CALL TR_CLOSEPROJECT(screenrequest)
  1086.                      CALL TR_UNLOCKPROJECT(prefswindow)
  1087.                      CALL TR_SETATTRIBUTE(prefswindow,220,'TROB_String',screenlist.number)
  1088.                   END
  1089.                END
  1090.  
  1091.                WHEN event.trm_class = 'TRMS_CLOSEWINDOW' THEN
  1092.                   quiteditprefs = TRUE
  1093.  
  1094.                OTHERWISE
  1095.                   NOP
  1096.             END
  1097.          END
  1098.       END
  1099.  
  1100.       CALL TR_CLOSEPROJECT(prefswindow)
  1101.    END
  1102.    ELSE
  1103.       CALL easyrequest(localestring(ERROR_CANNOT_OPEN_WINDOW),localestring(MSG_REQ_GAD_OKAY),mainwindow)
  1104.  
  1105.    IF libswindow ~= '00000000'x THEN
  1106.       CALL TR_UNLOCKPROJECT(libswindow)
  1107.  
  1108.    IF clipswindow ~= '00000000'x THEN
  1109.       CALL TR_UNLOCKPROJECT(clipswindow)
  1110.  
  1111.    IF otherwindow ~= '00000000'x THEN
  1112.       CALL TR_UNLOCKPROJECT(otherwindow)
  1113.  
  1114.    IF setclipwindow ~= '00000000'x THEN
  1115.       CALL TR_UNLOCKPROJECT(setclipwindow)
  1116.  
  1117.    CALL TR_UNLOCKPROJECT(mainwindow)
  1118.  
  1119.    IF prefs.screen ~= oldscreen THEN
  1120.       CALL useprefs
  1121.  
  1122.    RETURN
  1123.  
  1124.  
  1125.  
  1126. /*******************************************************************************
  1127. ** Neues Projekt beginnen
  1128. *******************************************************************************/
  1129.  
  1130. newproject:
  1131.    IF testchanges(localestring(MSG_REQ_REALLY_REMOVE),localestring(MSG_REQ_SAVE_REMOVE_GADS)) THEN DO
  1132.       prefsfile = ''
  1133.       changed   = FALSE
  1134.  
  1135.       scriptlist.0 = 0
  1136.       arglist.0    = 0
  1137.  
  1138.       CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  1139.  
  1140.       CALL disablegads()
  1141.    END
  1142.  
  1143.    RETURN
  1144.  
  1145.  
  1146.  
  1147. /*******************************************************************************
  1148. ** Projekt laden
  1149. *******************************************************************************/
  1150.  
  1151. loadprefs:
  1152.    file = getfilename(mainwindow,0,prefsfile,localestring(MSG_FILEREQ_OPEN_PROJECT))
  1153.  
  1154.    IF file ~= '' THEN DO
  1155.       oldscreen = prefs.screen
  1156.  
  1157.       IF ~loadrexx(PATHPART(file),FILEPART(file),'') THEN DO
  1158.          CALL easyrequest(localestring(ERROR_CANNOT_READ_FILE) '"'||file||'"!',localestring(MSG_REQ_GAD_OKAY),'00000000'x)
  1159.  
  1160.          IF ~loadrexx(PATHPART(prefsfile),FILEPART(prefsfile),'') THEN
  1161.             quit(localestring(ERROR_CANNOT_READ_FILE) '"'||prefsfile||'"!',10)
  1162.       END
  1163.       ELSE DO
  1164.          prefsfile = file
  1165.          changed = FALSE
  1166.  
  1167.          IF prefs.screen ~= oldscreen THEN
  1168.             CALL useprefs
  1169.          ELSE
  1170.             CALL TR_SETATTRIBUTE(mainwindow,1,'TROB_Listview','scriptlist')
  1171.       END
  1172.  
  1173.       use.arexxdir = prefs.arexxdir
  1174.       use.libdir   = prefs.libdir
  1175.  
  1176.       CALL disablegads()
  1177.    END
  1178.  
  1179.    RETURN
  1180.  
  1181.  
  1182.  
  1183. /*******************************************************************************
  1184. ** Projekt speichern
  1185. *******************************************************************************/
  1186.  
  1187. saveprefs:
  1188.    PARSE ARG file
  1189.  
  1190.    IF file = '' THEN DO
  1191.       defdir  = PATHPART(prefsfile)
  1192.       deffile = FILEPART(prefsfile)
  1193.  
  1194.       IF ASL_REQUESTFILE(mainwindow,'destvar',SaveFile(localestring(MSG_FILEREQ_SAVE_PROJECT),localestring(MSG_REQ_GAD_OKAY),defdir,deffile) 'ASLFR_PubScreenName' prefs.screen) THEN
  1195.          file = destvar.1
  1196.       ELSE
  1197.          RETURN(FALSE)
  1198.    END
  1199.  
  1200.    IF ~OPEN('prefshandle',file,'W') THEN DO
  1201.       CALL easyrequest(localestring(ERROR_CANNOT_OPEN_FILE) '"'||file||'"!',localestring(MSG_REQ_GAD_OKAY),mainwindow)
  1202.       RETURN(FALSE)
  1203.    END
  1204.  
  1205.    CALL WRITELN('prefshandle',"/* ARexxControl-Prefs */")
  1206.    CALL WRITELN('prefshandle',"")
  1207.    CALL WRITELN('prefshandle',"prefs.input     = '" || prefs.input     || "'")
  1208.    CALL WRITELN('prefshandle',"prefs.output    = '" || prefs.output    || "'")
  1209.    CALL WRITELN('prefshandle',"prefs.console   = '" || prefs.console   || "'")
  1210.    CALL WRITELN('prefshandle',"prefs.icon      = '" || prefs.icon      || "'")
  1211.    CALL WRITELN('prefshandle',"prefs.backupdir = '" || prefs.backupdir || "'")
  1212.    CALL WRITELN('prefshandle',"prefs.arexxdir  = '" || prefs.arexxdir  || "'")
  1213.    CALL WRITELN('prefshandle',"prefs.libdir    = '" || prefs.libdir    || "'")
  1214.    CALL WRITELN('prefshandle',"prefs.editor    = '" || prefs.editor    || "'")
  1215.    CALL WRITELN('prefshandle',"prefs.screen    = '" || prefs.screen    || "'")
  1216.    CALL WRITELN('prefshandle',"")
  1217.    CALL WRITELN('prefshandle',"scriptlist.0 =" scriptlist.0)
  1218.  
  1219.    DO i = 1 TO scriptlist.0
  1220.       CALL WRITELN('prefshandle',"scriptlist."||i "= '" || scriptlist.i || "'")
  1221.    END
  1222.  
  1223.    CALL WRITELN('prefshandle',"")
  1224.    CALL WRITELN('prefshandle',"arglist.0 =" arglist.0)
  1225.  
  1226.    DO i = 1 TO arglist.0
  1227.       CALL WRITELN('prefshandle',"arglist."||i "= '" || arglist.i || "'")
  1228.    END
  1229.  
  1230.    CALL CLOSE('prefshandle')
  1231.  
  1232.    prefsfile = file
  1233.    changed = FALSE
  1234.  
  1235.    RETURN(TRUE)
  1236.  
  1237.  
  1238.  
  1239. /*******************************************************************************
  1240. ** Info über das Programm anzeigen
  1241. *******************************************************************************/
  1242.  
  1243. about:
  1244.    CALL TR_AUTOREQUEST(app,mainwindow,PubScreenName(prefs.screen),
  1245.          BeginRequester(localestring(MSG_ABOUT_TITLE),'TRWP_CENTERDISPLAY'),
  1246.             'VertGroupA',
  1247.                'Space',
  1248.                CenteredText3(appname appversion '('||appdate||') (C) 1995 by Jürgen Kohrmeyer'),
  1249.                'SpaceS',
  1250.                CenteredText(appinfo),
  1251.                'Space',
  1252.                'HorizSeparator',
  1253.                'Space',
  1254.                CenteredText3(localestring(MSG_ABOUT_1)),
  1255.                'SpaceS',
  1256.                CenteredText(localestring(MSG_ABOUT_2)),
  1257.                'Space',
  1258.                'HorizSeparator',
  1259.                'Space',
  1260.                CenteredText3(localestring(MSG_ABOUT_3)),
  1261.                'SpaceS',
  1262.                'HorizGroupSC',
  1263.                   'Space',
  1264.                   TextN(localestring(MSG_ABOUT_4)) 'TRAT_Flags TRTX_NOUNDERSCORE',
  1265.                   'Space',
  1266.                'EndGroup',
  1267.                'Space',
  1268.             'EndGroup',
  1269.             'BeginRequesterGads',
  1270.             CenteredButtonRE(localestring(MSG_REQ_GAD_OKAY),10000),
  1271.          'EndRequester')
  1272.    RETURN
  1273.  
  1274.  
  1275.  
  1276. /*******************************************************************************
  1277. ** Fenster in der Titelzeile öffnen und alle anderen Fenster schließen
  1278. *******************************************************************************/
  1279.  
  1280. iconify:
  1281.    dummywindow = TR_OPENPROJECT(app,WindowID(1000) WindowTitle(appname appversion) PubScreenName(prefs.screen) 'EndProject')
  1282.  
  1283.    IF dummywindow ~= '00000000'x THEN DO
  1284.       selectedfile = TR_GETATTRIBUTE(mainwindow,1,'TRAT_Value')
  1285.  
  1286.       CALL TR_CLOSEPROJECT(mainwindow)
  1287.  
  1288.       IF libswindow ~= '00000000'x THEN
  1289.          CALL TR_CLOSEPROJECT(libswindow)
  1290.  
  1291.       IF clipswindow ~= '00000000'x THEN
  1292.          CALL TR_CLOSEPROJECT(clipswindow)
  1293.  
  1294.       IF otherwindow ~= '00000000'x THEN
  1295.          CALL TR_CLOSEPROJECT(otherwindow)
  1296.  
  1297.       IF setclipwindow ~= '00000000'x THEN
  1298.          CALL TR_CLOSEPROJECT(setclipwindow)
  1299.    END
  1300.    ELSE
  1301.       easyrequest(localestring(ERROR_CANNOT_ICONIFY_WINDOW),'_Okay',mainwindow)
  1302.  
  1303.    RETURN
  1304.  
  1305.  
  1306.  
  1307. /*******************************************************************************
  1308. ** Alle Fenster wieder öffnen
  1309. *******************************************************************************/
  1310.  
  1311. uniconify:
  1312.    CALL TR_CLOSEPROJECT(dummywindow)
  1313.    dummywindow = '00000000'x
  1314.  
  1315.    mainwindow = TR_OPENPROJECT(app,mainwindowtags)
  1316.  
  1317.    IF mainwindow = '00000000'x THEN
  1318.       quit(localestring(ERROR_CANNOT_OPEN_WINDOW),10)
  1319.  
  1320.    CALL TR_SETATTRIBUTE(mainwindow,1,'TRAT_Value',selectedfile)
  1321.  
  1322.    CALL disablegads()
  1323.  
  1324.    IF libswindow ~= '00000000'x THEN
  1325.       libswindow = TR_OPENPROJECT(app,libswindowtags)
  1326.  
  1327.    IF clipswindow ~= '00000000'x THEN
  1328.       clipswindow = TR_OPENPROJECT(app,clipswindowtags)
  1329.  
  1330.    IF otherwindow ~= '00000000'x THEN
  1331.       otherwindow = TR_OPENPROJECT(app,otherwindowtags)
  1332.  
  1333.    IF setclipwindow ~= '00000000'x THEN
  1334.       setclipwindow = TR_OPENPROJECT(app,setclipwindowtags)
  1335.  
  1336.    RETURN
  1337.  
  1338.  
  1339.  
  1340. /*******************************************************************************
  1341. ** Nachfragen, ob eventuelle Änderungen gespeichert werden sollen
  1342. *******************************************************************************/
  1343.  
  1344. testchanges:
  1345.    PARSE ARG question,gadgets
  1346.  
  1347.    IF changed THEN DO
  1348.       selection = easyrequest(localestring(MSG_REQ_PROJECT_CHANGED)||NL||question,gadgets,mainwindow)
  1349.  
  1350.       SELECT
  1351.          WHEN selection = 1 THEN         /* Quit */
  1352.             RETURN(TRUE)
  1353.  
  1354.          WHEN selection = 2 THEN         /* Save & Quit */
  1355.             RETURN(saveprefs(prefsfile))
  1356.  
  1357.          OTHERWISE                       /* Cancel */
  1358.             RETURN(FALSE)
  1359.       END
  1360.    END
  1361.  
  1362.    RETURN(TRUE)
  1363.  
  1364.  
  1365.  
  1366. /*******************************************************************************
  1367. ** Gadgets ab- oder einschalten
  1368. *******************************************************************************/
  1369.  
  1370. disablegads:
  1371.    IF scriptlist.0 > 0 THEN
  1372.       disable = FALSE
  1373.    ELSE
  1374.       disable = TRUE
  1375.  
  1376.    CALL TR_SETATTRIBUTE(mainwindow,3,'TRAT_Disabled',disable)
  1377.    CALL TR_SETATTRIBUTE(mainwindow,4,'TRAT_Disabled',disable)
  1378.    CALL TR_SETATTRIBUTE(mainwindow,5,'TRAT_Disabled',disable)
  1379.    CALL TR_SETATTRIBUTE(mainwindow,6,'TRAT_Disabled',disable)
  1380.    CALL TR_SETATTRIBUTE(mainwindow,7,'TRAT_Disabled',disable)
  1381.    CALL TR_SETATTRIBUTE(mainwindow,8,'TRAT_Disabled',disable)
  1382.    CALL TR_SETATTRIBUTE(mainwindow,9,'TRAT_Disabled',disable)
  1383.    CALL TR_SETATTRIBUTE(mainwindow,10,'TRAT_Disabled',disable)
  1384.    CALL TR_SETATTRIBUTE(mainwindow,11,'TRAT_Disabled',disable)
  1385.    RETURN
  1386.  
  1387.  
  1388.  
  1389. /*******************************************************************************
  1390. ** Screen in die Console-Beschreibung einsetzen
  1391. *******************************************************************************/
  1392.  
  1393. constring:
  1394.    PARSE ARG string
  1395.  
  1396.    position = POS('%S',UPPER(string))
  1397.  
  1398.    IF position ~= 0 THEN
  1399.       RETURN(LEFT(string,position-1)||prefs.screen||SUBSTR(string,position+2))
  1400.    ELSE
  1401.       RETURN(string)
  1402.  
  1403.  
  1404.  
  1405. /*******************************************************************************
  1406. ** Neue Screen-Einstellungen wirksam machen
  1407. *******************************************************************************/
  1408.  
  1409. useprefs:
  1410.    CALL TR_CLOSEPROJECT(mainwindow)
  1411.  
  1412.    IF libswindow ~= '00000000'x THEN
  1413.       CALL TR_CLOSEPROJECT(libswindow)
  1414.  
  1415.    IF clipswindow ~= '00000000'x THEN
  1416.       CALL TR_CLOSEPROJECT(clipswindow)
  1417.  
  1418.    IF otherwindow ~= '00000000'x THEN
  1419.       CALL TR_CLOSEPROJECT(otherwindow)
  1420.  
  1421.    IF setclipwindow ~= '00000000'x THEN
  1422.       CALL TR_CLOSEPROJECT(setclipwindow)
  1423.  
  1424.    CALL PUBSCREENTOFRONT(prefs.screen)
  1425.  
  1426.    INTERPRET windowdefs
  1427.  
  1428.    mainwindow = TR_OPENPROJECT(app,mainwindowtags)
  1429.  
  1430.    IF mainwindow = '00000000'x THEN
  1431.       quit(localestring(ERROR_CANNOT_OPEN_WINDOW),10)
  1432.  
  1433.    CALL disablegads()
  1434.  
  1435.    IF libswindow ~= '00000000'x THEN DO
  1436.       libswindow = '00000000'x
  1437.       CALL openliblist
  1438.    END
  1439.  
  1440.    IF clipswindow ~= '00000000'x THEN DO
  1441.       clipswindow = '00000000'x
  1442.       CALL opencliplist
  1443.    END
  1444.  
  1445.    IF otherwindow ~= '00000000'x THEN DO
  1446.       otherwindow = '00000000'x
  1447.       CALL openotherlist
  1448.    END
  1449.  
  1450.    IF setclipwindow ~= '00000000'x THEN DO
  1451.       setclipwindow = '00000000'x
  1452.       CALL opensetclip
  1453.    END
  1454.  
  1455.    RETURN
  1456.  
  1457.  
  1458.  
  1459. /*******************************************************************************
  1460. ** Einen einfachen Requester anzeigen
  1461. *******************************************************************************/
  1462.  
  1463. easyrequest:
  1464.    PARSE ARG text,gadgets,project
  1465.  
  1466.    IF project ~= '00000000'x THEN
  1467.       tags = 'TREZ_LockProject' C2D(project) 'TREZ_Return 0 TREZ_ReqPos TRWP_CENTERDISPLAY TAG_END'
  1468.    else
  1469.       tags = 'TAG_END'
  1470.  
  1471.    RETURN(TR_EASYREQUEST(app,text,gadgets,tags))
  1472.  
  1473.  
  1474.  
  1475. /*******************************************************************************
  1476. ** Datei auswählen und in StringGadget eintragen
  1477. *******************************************************************************/
  1478.  
  1479. getfilename:
  1480.    PARSE ARG window,gadget,def,title
  1481.  
  1482.    IF gadget ~= 0 THEN
  1483.       def = TR_GETATTRIBUTE(window,gadget,'TROB_String')
  1484.  
  1485.    defdir  = PATHPART(def)
  1486.    deffile = FILEPART(def)
  1487.  
  1488.    IF ASL_REQUESTFILE(window,'destvar',LoadFile(title,localestring(MSG_REQ_GAD_USE),defdir,deffile) 'ASLFR_PubScreenName' prefs.screen) THEN DO
  1489.       IF gadget ~= 0 THEN
  1490.          CALL TR_SETATTRIBUTE(window,gadget,'TROB_String',destvar.1)
  1491.  
  1492.       RETURN(destvar.1)
  1493.    END
  1494.  
  1495.    RETURN('')
  1496.  
  1497.  
  1498.  
  1499. /*******************************************************************************
  1500. ** Ein ARexx-Script laden und interpretieren
  1501. *******************************************************************************/
  1502.  
  1503. loadrexx:
  1504.    PARSE ARG dir,file,store
  1505.  
  1506.    IF dir ~= '' THEN DO
  1507.       IF RIGHT(dir,1) = ':' THEN
  1508.          file = dir||file
  1509.       ELSE
  1510.          file = dir||'/'||file
  1511.    END
  1512.  
  1513.    IF ~OPEN('rexxfile',file,'R') THEN
  1514.       RETURN(FALSE)
  1515.  
  1516.    rexxtext = READCH('rexxfile',64000)
  1517.    INTERPRET rexxtext
  1518.  
  1519.    CALL CLOSE('rexxfile')
  1520.  
  1521.    IF store ~= '' THEN
  1522.       INTERPRET store '= rexxtext'
  1523.  
  1524.    DROP rexxtext
  1525.  
  1526.    RETURN(TRUE)
  1527.  
  1528.  
  1529.  
  1530. /*******************************************************************************
  1531. ** Text aus dem Catalog-File auslesen, falls vorhanden
  1532. *******************************************************************************/
  1533.  
  1534. localestring:
  1535.    PARSE ARG stringnumber
  1536.  
  1537.    IF uselocale THEN
  1538.       RETURN(GETCATALOGSTR(catalog,stringnumber,strings.stringnumber))
  1539.    ELSE
  1540.       RETURN(strings.stringnumber)
  1541.  
  1542.  
  1543.  
  1544. /*******************************************************************************
  1545. ** Alles öffnen und Variablen initialisieren
  1546. *******************************************************************************/
  1547.  
  1548. initall:
  1549.    /*
  1550.    ** Variablen initialisieren
  1551.    */
  1552.  
  1553.    TRUE  = 1
  1554.    FALSE = 0
  1555.    NL    = '0A'x
  1556.  
  1557.    app           = '00000000'x
  1558.    mainwindow    = '00000000'x
  1559.    libswindow    = '00000000'x
  1560.    clipswindow   = '00000000'x
  1561.    otherwindow   = '00000000'x
  1562.    setclipwindow = '00000000'x
  1563.    dummywindow   = '00000000'x
  1564.  
  1565.    scriptlist.0  = 0
  1566.    liblist.0     = 0
  1567.    arglist.0     = 0
  1568.    cliplist.0    = 0
  1569.    otherlist.0   = 0
  1570.    otherlistmode = 0
  1571.  
  1572.    changed    = FALSE
  1573.    tracing    = FALSE
  1574.    globalhalt = FALSE
  1575.  
  1576.  
  1577.    /*
  1578.    ** Pfad des ARexxControl-Verzeichnisses
  1579.    */
  1580.  
  1581.    PARSE SOURCE . . . script .
  1582.  
  1583.    position = LASTPOS('/',script)
  1584.  
  1585.    IF position = 0 THEN
  1586.       position = LASTPOS(':',script)
  1587.    ELSE
  1588.       position = position-1
  1589.  
  1590.    progdir = SUBSTR(script,1,position)
  1591.  
  1592.  
  1593.    /*
  1594.    ** locale.library
  1595.    */
  1596.  
  1597.    uselocale = TRUE
  1598.  
  1599.    IF ~SHOW('LIBRARIES','locale.library') THEN
  1600.       IF ~ADDLIB('locale.library',-10,-30,0) THEN
  1601.          uselocale = FALSE
  1602.  
  1603.  
  1604.    /*
  1605.    ** Standard-Texte laden und Katalog öffnen
  1606.    */
  1607.  
  1608.    IF ~loadrexx(progdir,'ARexxControl.strings','') THEN
  1609.       quit('Error reading file "ARexxControl.strings"!'),10)
  1610.  
  1611.    IF uselocale THEN DO
  1612.       catalogfile = 'catalogs/deutsch/ARexxControl.catalog'
  1613.  
  1614.       IF RIGHT(progdir,1) = ':' THEN
  1615.          catalog = OPENCATALOG(progdir||'catalogs/deutsch/ARexxControl.catalog','english',0)
  1616.       ELSE
  1617.          catalog = OPENCATALOG(progdir||'/catalogs/deutsch/ARexxControl.catalog','english',0)
  1618.  
  1619.       IF catalog = 0 THEN
  1620.          catalog = OPENCATALOG('ARexxControl.catalog','english',0)
  1621.    END
  1622.  
  1623.  
  1624.    /*
  1625.    ** Libraries öffnen
  1626.    */
  1627.  
  1628.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  1629.       IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN
  1630.          quit(localestring(ERROR_CANNOT_OPEN_TRITONREXX),10)
  1631.  
  1632.    IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN
  1633.       IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN
  1634.          quit(localestring(ERROR_CANNOT_OPEN_REXXTRICKS),10)
  1635.  
  1636.    IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
  1637.       IF ~ADDLIB('rexxsupport.library',9,-30,0) THEN
  1638.          quit(localestring(ERROR_CANNOT_OPEN_REXXSUPPORT),10)
  1639.  
  1640.  
  1641.    /*
  1642.    ** Applikation erzeugen
  1643.    */
  1644.  
  1645.    app = TR_CREATEAPP('TRCA_Name'     '"'appname'"',
  1646.                       'TRCA_LongName' '"'applongname'"',
  1647.                       'TRCA_Info'     '"'appinfo'"',
  1648.                       'TRCA_Version'  '"'appversion'"',
  1649.                       'TRCA_Release'  '"'apprelease'"',
  1650.                       'TRCA_Date'     '"'appdate'"',
  1651.                       'TAG_END')
  1652.  
  1653.    IF app = '00000000'x THEN
  1654.       quit(localestring(ERROR_CANNOT_CREATE_APP),10)
  1655.  
  1656.  
  1657.    /*
  1658.    ** Prefs laden
  1659.    */
  1660.  
  1661.    IF prefsfile = '' THEN DO
  1662.       prefsfile = MAKEPATH(PRAGMA('DIRECTORY'),'ARexxControl.prefs')
  1663.  
  1664.       IF ~EXISTS(prefsfile) THEN
  1665.          prefsfile = MAKEPATH(progdir,'ARexxControl.prefs')
  1666.    END
  1667.  
  1668.    IF PATHPART(prefsfile) = prefsfile THEN DO
  1669.       dir  = PRAGMA('DIRECTORY')
  1670.       file = prefsfile
  1671.    END
  1672.    ELSE DO
  1673.       dir  = PATHPART(prefsfile)
  1674.       file = FILEPART(prefsfile)
  1675.    END
  1676.  
  1677.    IF ~loadrexx(dir,file,'') THEN DO
  1678.       CALL easyrequest(localestring(ERROR_CANNOT_READ_FILE) '"'||prefsfile||'"!',localestring(MSG_REQ_GAD_OKAY),'00000000'x)
  1679.  
  1680.       prefs.input     = "CON:20/20/600/100/ARexxShell Input/%s"
  1681.       prefs.output    = "CON:20/120/600/100/ARexxShell Output/CLOSE/AUTO/INACTIVE/%s"
  1682.       prefs.console   = "CON:////ARexxControl Console/CLOSE/AUTO/WAIT/%s"
  1683.       prefs.icon      = "def_script.info"
  1684.       prefs.backupdir = "DH0:"
  1685.       prefs.arexxdir  = "REXX:"
  1686.       prefs.libdir    = "LIBS:"
  1687.       prefs.editor    = "C:ED %s"
  1688.       prefs.screen    = "Workbench"
  1689.    END
  1690.  
  1691.    use.arexxdir = prefs.arexxdir
  1692.    use.libdir   = prefs.libdir
  1693.  
  1694.  
  1695.    /*
  1696.    ** Fensterbeschreibungen laden
  1697.    */
  1698.  
  1699.    IF ~loadrexx(progdir,'ARexxControl.windows','windowdefs') THEN
  1700.       quit(localestring(ERROR_CANNOT_READ_FILE) '"ARexxControl.windows"!',10)
  1701.  
  1702.  
  1703.    /*
  1704.    ** Hauptfenster öffnen
  1705.    */
  1706.  
  1707.    mainwindow = TR_OPENPROJECT(app,mainwindowtags)
  1708.  
  1709.    IF mainwindow = '00000000'x THEN
  1710.       quit(localestring(ERROR_CANNOT_OPEN_WINDOW),10)
  1711.  
  1712.    CALL disablegads()
  1713.    CALL PUBSCREENTOFRONT(prefs.screen)
  1714.  
  1715.    RETURN
  1716.  
  1717.  
  1718.  
  1719. /*******************************************************************************
  1720. ** Programm beenden
  1721. *******************************************************************************/
  1722.  
  1723. quit:
  1724.    PARSE ARG message,rcode
  1725.  
  1726.    IF app ~= '00000000'x THEN DO
  1727.       IF message ~= '' THEN
  1728.          CALL easyrequest(message,'_Quit',mainwindow)
  1729.  
  1730.       CALL TR_DELETEAPP(app)
  1731.    END
  1732.    ELSE DO
  1733.       IF message ~= '' THEN
  1734.          SAY message
  1735.    END
  1736.  
  1737.    IF uselocale THEN
  1738.       CALL CLOSECATALOG(catalog)
  1739.  
  1740.    IF tracing THEN
  1741.       ADDRESS COMMAND 'SYS:RexxC/TCC'
  1742.  
  1743.    EXIT(rcode)
  1744.  
  1745.  
  1746.  
  1747. /*******************************************************************************
  1748. ** Funktion, die bei Programmabbruch durch Fehler,
  1749. ** Control-C oder Halt-Befehl aufgerufen wird.
  1750. *******************************************************************************/
  1751.  
  1752. halt:
  1753.    IF globalhalt THEN DO
  1754.       globalhalt = FALSE
  1755.       SIGNAL startofprogram
  1756.    ELSE
  1757.  
  1758. break_c:
  1759. failure:
  1760. ioerr:
  1761. syntax:
  1762.    IF ~SHOW('LIBRARIES','tritonrexx.library') THEN
  1763.       CALL ADDLIB('tritonrexx.library',10,-30,0)
  1764.  
  1765.    CALL easyrequest('Error' rc 'in line' sigl ||NL|| SOURCELINE(sigl) ||NL|| ERRORTEXT(rc),'_Quit',mainwindow)
  1766.  
  1767.    CALL TR_DELETEAPP(app)
  1768.  
  1769.    IF uselocale THEN DO
  1770.       IF ~SHOW('LIBRARIES','locale.library') THEN
  1771.          CALL ADDLIB('locale.library',-10,-30,0)
  1772.  
  1773.       CALL CLOSECATALOG(catalog)
  1774.    END
  1775.  
  1776.    IF tracing THEN
  1777.       ADDRESS COMMAND 'SYS:RexxC/TCC'
  1778.  
  1779.    EXIT(20)
  1780.